#ifndef __THREAD_HPP__
#define __THREAD_HPP__

#include <iostream>
#include <string>

typedef void*(*pfunc)(void*);

#include <pthread.h>

// 封装线程名称和线程回调函数的参数
class Thread_name_and_Args
{
public:
    Thread_name_and_Args(const std::string& name, void* args)
        : _name(name)
        , _args(args)
    {}
public:
    std::string _name;
    void* _args;
};

// 线程接口的封装
class Thread
{
public:
    Thread(const std::string& name, pfunc func, void* args)
        : _NA(name, args)
        , _func(func)
    {}

    // 创建线程
    void CreateThread()
    {
        pthread_create(&_tid, nullptr, _func, &_NA);
    }

    // 等待线程
    void JoinThread()
    {
        pthread_join(_tid, nullptr);
    }

    const std::string& getName()const
    {
        return _NA._name;
    }

    ~Thread()
    {}

private:
    pthread_t _tid; // 线程id
    Thread_name_and_Args _NA; // 线程名称和回调函数参数
    pfunc _func; // 回调函数的指针
};
#endif